package com.fht.controller;


import com.fht.constant.ManagermentSystemConstant;
import com.fht.enums.ManagermentSystemEnum;
import com.fht.util.RandomUtil;
import com.fht.util.ResultVOUtil;
import com.fht.util.UploadUtils;
import com.fht.vo.ResultVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.imageio.ImageIO;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 *
 * 图片上传模块
 *
 */

@Controller
@Slf4j
@RequestMapping("/upload")
public class UploadController {

    @Autowired
    private UploadUtils uploadUtils;



    @PostMapping("/pic")
    @ResponseBody
    public ResultVO pic(MultipartFile file) throws IOException {

        if (file==null || file.getSize()==0){
            log.info("【上传文件】 上传文件不能为空！ file={} ",file);
            return ResultVOUtil.error(ManagermentSystemEnum.UPLOAD_FILE_BLANK);
        }
        //        5.1 大小判断.
        if (file.getSize()> ManagermentSystemConstant.PIC_SIZE){
            log.info("【上传文件】 上传文件过大！ file={} ",file);
            return ResultVOUtil.error(ManagermentSystemEnum.UPLOAD_SIZE_ERROR);
        }
//        5.2 类型判断.
        String fileName = file.getOriginalFilename();
        String fileType = fileName.substring(fileName.lastIndexOf(".")+1);
        if (!ManagermentSystemConstant.FILE_TYPE.contains(fileType)){
            log.info("【上传文件】 上传文件格式错误！" );
            return ResultVOUtil.error(ManagermentSystemEnum.UPLOAD_TYPE_ERROR);
        }
//        5.3 是否损坏.
        if (ImageIO.read(file.getInputStream())==null){
            log.info("【上传文件】 上传文件已损坏！ file={} ",file);
            return ResultVOUtil.error(ManagermentSystemEnum.UPLOAD_DAMAGE);
        }
//        5.4 新名字.**
        String newfile = RandomUtil.getRandom() +"."+fileType;

        //调用上传到阿里云图片服务的工具类
        String url = uploadUtils.uploadPic(ManagermentSystemConstant.PICKEY + "/" + newfile, file.getInputStream());

        Map<String,String> map = new HashMap<>();
        map.put("src",url);
        return ResultVOUtil.ok(map);
    }


    @PostMapping("/apk")
    @ResponseBody
    public ResultVO apk(MultipartFile file) throws IOException {

        if (file==null || file.getSize()==0){
            log.info("【上传文件】 上传文件不能为空！ file={} ",file);
            return ResultVOUtil.error(ManagermentSystemEnum.UPLOAD_FILE_BLANK);
        }
        //        5.1 大小判断.
        if (file.getSize()> ManagermentSystemConstant.APK_SIZE){
            log.info("【上传文件】 上传文件过大！ file={} ",file);
            return ResultVOUtil.error(ManagermentSystemEnum.UPLOAD_SIZE_ERROR);
        }
        if (!StringUtils.endsWithIgnoreCase(file.getOriginalFilename(), ManagermentSystemConstant.APK_TYPE)){
            log.info("【上传文件】 上传文件格式错误！" );
            return ResultVOUtil.error(ManagermentSystemEnum.UPLOAD_TYPE_ERROR);
        }

        String newfile = RandomUtil.getRandom() +"."+ ManagermentSystemConstant.APK_TYPE;

        //调用上传到阿里云图片服务的工具类
        String url = uploadUtils.uploadPic(ManagermentSystemConstant.APKKEY + "/" + newfile, file.getInputStream());

        Map<String,String> map = new HashMap<>();
        map.put("src",url);
        return ResultVOUtil.ok(map);

    }
}
